package com.newmainsoftech.dao.entity.relation;

import java.lang.reflect.Method;
import java.util.Collection;


public interface BiLinkListProxy<R extends HolderSide<E>, E extends HoldeeSide<R>>  
extends BiLinkCollectionProxy<R, E> {
	/**
	 * Indicate whether sub-list spawned from this will also be the same type.<br />
	 * 
	 * @return
	 */
	boolean isMediationInherited();
	/**
	 * To set whether sub-list spawned from this will also be the same type.<br />
	 * 
	 * @param isMediationInherited
	 */
	void setMediationInherited( boolean isMediationInherited);
	
	/**
	 * To handle invocation of <code>listIterator(int index)</code> method of 
	 * <code>List</code> interface.<br /> 
	 * 
	 * @param proxy
	 * @param method
	 * @param index
	 * @return
	 */
	Object interListIterator( Object proxy, Method method, int index);
	/**
	 * To handle invocation of <code>remove(int index)</code> method of 
	 * <code>List</code> interface.<br /> 
	 * 
	 * @param proxy
	 * @param method
	 * @param index
	 * @return
	 */
	Object interRemove( Object proxy, Method method, int index);
	/**
	 * To handle invocation of <code>set( int index, E element)</code> method of 
	 * <code>List</code> interface.<br /> 
	 * 
	 * @param proxy
	 * @param method
	 * @param index
	 * @param holdeeBunch
	 * @return
	 */
	Object interSet( Object proxy, Method method, int index, Collection<? extends E> holdeeBunch);
	/**
	 * To handle invocation of <code>subList( int fromIndex, int toIndex)</code> method of 
	 * <code>List</code> interface.<br /> 
	 * 
	 * @param proxy
	 * @param method
	 * @param index
	 * @param toIndex
	 * @return
	 */
	Object interSubList( Object proxy, Method method, int index, int toIndex);
}
